<?php
class magick {
	
	/**
	 *  MagickWand resource
	 */
	private $resMWand;
	
	/**
	 *  DrawingWand resource
	 */
	private $resDWand;
	
	/** 
	 * 保存的文件名
	 */
	private $savefile;
	
	/** 
	 * 构造函数
	 *
	 */
	function __construct() {
		$this->resMWand = NewMagickWand ();
		$this->resDWand = NewDrawingWand ();
	}
	
	/** 析构函数 */
	function __destruct() {
		DestroyMagickWand ( $this->resMWand );
		DestroyDrawingWand ( $this->resDWand );
	}
	
	/**
	 * 设置操作的图片。
	 * @param $image 图片，包含地址，如: uploads/user_id/image1.jpg
	 */
	function setImage($image) {
		if (file_exists ( $image )) {
			MagickReadImage ( $this->resMWand, $image );
		} else {
			echo $image;
			echo "上传的文件不存在";
			exit ();
		}
	}
	
	/**
	 * 返回Image
	 * @return $resMWand
	 */
	function getImage(){
		return $this->resMWand;
	}
	
	/**
	 * 设置要保存的文件名
	 * @param $filename 文件名
	 * 
	 */
	function setSaveFile($filename){
		$this->savefile = $filename;
	}
	
	/**
	 * 获得设置的保存文件名
	 * @return String 设置的要保存的文件名,若未设置返回NULL；
	 */
	function getSaveFile(){
		return $this->savefile;
	}
	
	
	/**
	 * 叠加图片到底片
	 * @param $jewelry_id 饰品编号
	 * @param $styles 样式
	 * @param x 
	 * @param y
	 */
	function addJewelry($jewelry_id, $styles, int $x, int $y) {
		$path_to_jewelry = $this->getJewelryFromID ( $jewelry_id ); //取素材，包括地址。
		

		$jewelry = NewMagickWand ();
		MagickReadImage ( $jewelry, $path_to_jewelry );
		
		MagickCompositeImage ( $this->resMWand, $jewelry, $composite_operator, $x, $y );
		
		MagickWriteImage ( $this->resMWand, $this->savefile );
	}
	
	/**
	 * 通过素材ID得到素材的存放地址
	 * @param $jewelry_id 素材ID
	 * @return String 素材地址
	 */
	function getJewelryFromID($jewelry_id) {
		$path_to_jewelry = null;
		return $path_to_jewelry;
	}
	
	/**
	 * 得到素材resource
	 * @param $jewelry_id 素材ID
	 * @return MagickWand res 返回MagickWand资源
	 */
	function getJewelry($jewelry_id) {
		$path_to_jewelry = $this->getJewelryFromID ( $jewelry_id );
	
	}
	
	/**
	 * 处理素材的效果
	 * @param $jewelry_id 素材ID
	 * @param $styles 效果，数组。
	 * @return String 最后生成 的图片地址
	 */
	function makeJewelry($jewelry_id, $styles) {
		$pathjewelry = $this->getJewelryFromID ( $jewelry_id );
	
	}
	
	/**
	 * 螺旋图像，以图像中心为圆心旋转
	 * @param $mgck_wnd 图像
	 * @param $degrees 角度 1 to 360
	 * @return MagickWand 图像
	 */
	function SwirlImage($mgck_wnd, $degrees){
		MagickSwirlImage($mgck_wnd, $degrees);
		return $mgck_wnd;
	}
	
	/**
	 * 旋转图像
	 * @param $mgck_wnd 图像
	 * @param $background 背景PixelWand
	 * @param $degrees 角度
	 * @return MagickWand 图像
	 */
	function RotateImage($mgck_wnd, $background, $degrees){
		MagickRotateImage($mgck_wnd,$background,$degrees);
		return $mgck_wnd;
	}
	
	/**
	 * 测试，系统测试用
	 */
	function test() {
		// convert flower.jpg -font courier -fill white -pointsize 20 -annotate +50+50 Flower flower_annotate1.jpg
		

		$resource = NewMagickWand ();
		$dwand = NewDrawingWand ();
		$pwand = NewPixelWand ();
		
		PixelSetColor ( $pwand, "white" );
		DrawSetFont ( $dwand, "c:\WINDOWS\Fonts\SIMSUN.ttc" ); //指定字体
		DrawSetFontSize ( $dwand, 20 );
		DrawSetFillColor ( $dwand, $pwand );
		
		DrawSetGravity ( $dwand, MW_SouthGravity );
		
		MagickReadImage ( $resource, 'flower.jpg' );
		
		if (MagickAnnotateImage ( $resource, $dwand, 0, 0, 0, "Flower" )) {
			//header ( 'Content-Type: image/gif' );
			//MagickEchoImageBlob ( $resource );
			echo "准备……；";
			MagickWriteImage ( $resource, 'newflower.jpg' );
			echo "写入完毕。";
		} else {
			echo MagickGetExceptionString ( $resource );
		}
	
	}
	
	/**
	 * 检查目录是否存在，目前需要uploads/member/build目录的存在。
	 * @param $userid 用户id
	 * @param $rootpath 网站根路径
	 * @return NULL
	 */
	function checkUserDir($userid, $rootpath) {
		$userdir = $rootpath . '\\uploads\\member\\' . $userid;
		$userbuilddir = $userdir.'\\build\\';
		if(!file_exists ($userdir)){
			mkdir($userdir);
		}
		if(!file_exists($userbuilddir)){
			mkdir($userbuilddir);
		}
	
	}
}
?>